package com.iplant.base.utils.annotation.condition;


import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * 字段的查询条件
 *
 * @author xiuto
 */
@Inherited
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD})
public @interface DBCondition {


    /**
     * 参数名称  默认使用字段名称  使用范围判断时是下限值
     *
     * @return
     */
    String ParamName() default "";

    /**
     * 上限参数名称 默认使用字段名称 使用范围判断时 为上限值
     *
     * @return
     */
    String ParamName2() default "";


    /**
     * 比较类型
     *
     * @return
     */
    DBCompareType CompareType() default DBCompareType.eq;


    /**
     * 是否为必须条件
     * @return
     */
    boolean MustCondition() default false;


    /**
     * 条件的对比方式
     */
    enum DBCompareType {
        /**
         * 等于
         */
        eq,
        /**
         * 不等于
         */
        ne,
        /**
         * 参数大于数据库值
         */
        gt,
        /**
         * 小于  数据值比输入值小
         */
        lt,
        /**
         * 参数大于小于 < ? <
         */
        gtLt,

        /**
         * 参数大于等于
         */
        ge,
        /**
         * 参数小于等于
         */
        le,
        /**
         *  小于等于<= ? <=  大于等于
         */
        geLe,
        /**
         *  小于 > ? >=  大于等于
         */
        geLt,
        /**
         * 小于等于 <= ? <  大于
         */
        gtLe,
        /**
         * LIKE %xx%
         */
        like,
        /**
         * xx%
         */
        leftLike,

        /**
         * %xx
         */
        rightLike,

        /**
         * xxx  LIKE %prop%
         */
        likeProp,
        /**
         * xx%
         */
        leftLikeProp,

        /**
         * %xx
         */
        rightLikeProp,

        /**
         * Like取反
         */
        notLike,
        /**
         * In
         */
        in,
        /**
         * notIn
         */
        notIn,
        /**
         * 都能匹配到
         */
        findInSet,
        /**
         * 都不能匹配到
         */
        NotFindInSet,
        /**
         * 只要有一个匹配到
         */
        findInSetOR,
        /**
         * 只要有一个匹配不到
         */
        NotFindInSetOR,

        /**
         * 与
         */
        Combine;


    }




}
